讓我們再次檢視一下「入門教學」的設計。 如果您至今尚未完成「入門教學」的設計,請先返回並完成「入門教學」(入門教學)。 到目前為止,我們唯一進行的調整僅是參數名稱。 現在,我們要調整這個 Applet,使其能夠處理來自具備以下特性的相機所拍攝的影像
- 影像側面尺寸 512 x 512
- 12 bit / pixel 灰階
- 採用 dual tap base 組態模式的 Camera Link 介面
我們的設計已經配備了 CameraGrayAreaBase operator。 此 operator 來自 mE4VD4-CL operator 庫,僅適用於 mE4 Camera Link frame grabbers,亦即 mE4VD4-CL 庫是一個包含硬體 specific operator 的庫。 CameraGrayAreaBase operator 支援採用 base 組態模式使用 Camera Link 的灰階面陣相機。 在設計中的相機模組上按兩下以開啟其屬性。 其中一個參數稱為「Format」。在此處,可以選擇特定的 Camera Link 格式。我們選擇 DualTap12Bit, 套用變更並關閉視窗。 我們的設計現在能夠擷取 12 bit 相機影像。
請注意,「Format」參數是動態的。這意味著,該值可以在硬體中合成設計後進行變更, 從而能夠靈活使用多種相機格式。 但是,如果我們按兩下相機上的連結,我們會發現連結的 Bit Width 仍然是 8 bit/pixel。此外, 最大影像尺寸不夠大。 您可能會問自己,如果連結只有 8 bit,為什麼可以使用 12 bit 相機。 答案是,相機影像中只有八個最高有效位元被傳輸,也就是說,只使用了可用的連結位元。 operator 將根據相機 operator 中的設定自動從影像中選擇正確的位元。 請查看相機 operator 的說明文件以了解更多資訊('CameraGrayAreaBase')。 我們將 Bit Width 變更為 12 bit,以處理完整的相機位元深度。
變更值後,按一下「Apply」。如您所見,相機、緩衝區和 DMA 之間連結的顏色已從黑色變為綠色。 這表示變更已被接受和驗證。此外,link property「bit width」已透過 影像緩衝區傳播到 緩衝區與 DMA 模組之間的連結。因此,使用者不需要在每個連結上變更 bitwidth。 Link property 會透過模組進行傳播,直到它們自身變更 link bitwidth 或需要使用者輸入為止。 如果您開啟緩衝區與 DMA 之間連結的 link property,您會注意到無法 在此處變更 bitwidth。
這是因為前置 operator ImageBuffer 無法變更 link bit width。 因此,只有在連接的 operator 允許變更(即根據定義是會影響 bit width 的運算)時,才能變更 link property。
相機所需的影像側面尺寸為 512 x 512 pixel。在 link property 中,我們可以看到名為 Max. Img Width 和 Max. Image Height 的屬性。 這些屬性代表連結上的最大影像尺寸。這是最大值。允許任何較小的尺寸。 然而,超過此限制的影像尺寸將違反 VisualApplets 設計規則,並且您在硬體中使用 applet 時可能會收到錯誤。
影像尺寸的設定應始終選擇所需的最小值,因為較小的影像尺寸可以節省 FPGA 邏輯和記憶體資源。 回到我們的範例:開啟相機與緩衝區之間連結的 link property,並選擇 512 x 512 的最大影像 寬度和高度。 完成後,按一下「Apply」。
再次強調,您會注意到該變更直接影響了目前連結以及位於緩衝區模組之後的連結的 link property。 此外,您可以看到緩衝區模組現在標記為紅色。這是因為我們現在建立了所謂的「非法 條件」。這意味著, 一個或多個 link property 與模組中的參數設定不相容。 在我們的例子中,ImageBuffer 的參數設定不能與連結的設定一起使用。 如果您關閉所有屬性視窗並執行設計規則檢查 Ctrl+F7 您將獲得如下圖所示的錯誤訊息。
您可以按一下其中一個錯誤訊息以突顯顯示發生錯誤的模組。 如果您有包含多個階層的大型設計,並且無法立即看出 operator 所在的 位置,這會非常有用。 現在,開啟緩衝區模組的屬性對話方塊。同樣地,您可以看到導致錯誤的四個參數 被染成了紅色。
此外,錯誤的原因現在變得顯而易見:operator 中設定的興趣區(region of interest)大於連結上 允許的最大 影像尺寸。這將違反 operator 的參數範圍和 VisualApplets 設計規則,因此 會導致錯誤。 透過將 XLength 和 YLength 參數變更為值 512,您可以立即使您的設計恢復有效狀態。
我們的設計已經接近完成。我們現在可以開始進行建置,並將該設計應用於硬體中。 不過,我們還有一個步驟需要考慮。到目前為止,我們已將 12 bit 像素值直接連接至 DMA 模組。 這會導致每個像素的 12 bit 都傳輸至 PC。 由於像素分佈在多個位元組中,這種格式非常難以由軟體程式進行處理。 因此,每個像素應剛好佔用一個或多個位元組。在我們的範例中,我們將像素擴展為 16 bit。為此, 我們需要在緩衝區與 DMA 模組之間 放置另一個運算子。現有數個運算子可用來解決我們的任務。 我們將使用基礎運算子庫中的 ConvertPixelFormat 運算子。將該運算子放置在緩衝區與 DMA 模組之間。 如果您將運算子直接放在連線上,該運算子將會自動插入。接著,您應該將模組重新命名為 「To16Bit」,並開啟運算子後方的連線屬性。如您所見,模組輸出的預設連線 Bit Width 已被選取, 即每個像素 8 bit。因此,該模組已覆寫輸入連線的 Bit Width。 輸入連線 Bit Width 的任何變更都會被忽略。 該模組將一律輸出參數化後的值。預設的每個像素 8 bit 會將 Bit Width 從 12 降低為 8,然而相反地, 我們想要提高 Bit Width。因此,您只需要將連線屬性值變更為 16 bit 並確認變更即可。
ConvertPixelFormat 運算子現在將透過在較低位置插入四個常數零位元, 將 12 bit 輸入像素擴展為 16 bit。 換句話說,我們執行了向左位移四個位元的動作。 除了使用 ConvertPixelFormat 運算子之外,也可以改用 ShiftLeft 運算子。 透過滑鼠選取您的設計中的 ConvertPixelFormat 運算子,然後從彈出式選單或主功能表列中按下刪除來將其刪除; 或者直接按下 Del 。 從 arith 運算子庫中插入 ShiftLeft 運算子。將其插入設計中並檢查連線屬性。 如您所見,連線 Bit Width 仍為 12 bit,且無法在連線屬性中進行變更。對於此運算子, 連線 Bit Width 是透過參數來變更的。具體來說是 Shift 參數。將參數值變更為 4,套用變更並返回連線屬性。 如您所見,連線 Bit Width 現在已變更為 16 bit。 總結來說:某些連線屬性可以在連線上變更,而有些則使用運算子屬性來變更。 在各自的範例中,這兩種方法都是運算子所需的,因為其中一個是用於指定獨立於輸入 Bit Width 的輸出 Bit Width(亦即自動決定位移值), 而位移運算子則是用於指定位移值。 在此情況下,輸出 Bit Width 是由參數化值和輸入 Bit Width 自動決定的。
在此範例中,我們在較低位元位置插入了四个位元。如果您想要將四个位元新增至較高位元位置 以取得 16 bit,您可以改用 CastBitWidth 運算子。
位元運算運算子的說明與範例可在運算子參考中找到。 請參閱 'ConvertPixelFormat'、'ShiftLeft'、'ShiftRight' 與 'CastBitWidth'。
我們現在已完成基本擷取設計的擴充。 接著,您可以建置並將您的設計應用於硬體中。 您已經學習了如何設定參數以及如何解決衝突。 在下一節中,將提供適用於所有類型相機的基本 Acquisition Applets 清單。









上一頁

